package mbeans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.sun.research.ws.wadl.Request;

import model.Anuncio;
import model.Usuario;
import armazenamento.Cadastros;

@ManagedBean(name="principal")
@SessionScoped
public class Principal {
	// referência para uma única instância - Singleton
	private static Cadastros cadastros;
		
	private String login;
	private String senha;
	private Usuario usuario = null;
	private List<Anuncio> anuncioTemp = new ArrayList<Anuncio>();
	private Anuncio novoAnuncio = new Anuncio();
	private Anuncio novoDetalhes = new Anuncio();
	
	private String msg = "";
	
	public Principal() {
		super();
		this.login = null;
		cadastros = Cadastros.getInstance();
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
	public String sair(){
		
		return "sairLogin";
	}
	
	public String sairAnuncio(){
		
		return "sairAnuncio";
	}
			
	public String autentica() {
		usuario = cadastros.getUsuario(this.login);
		if (usuario != null && senha.equals(usuario.getSenha())) {
			this.msg = "";
			return "telaAnuncios";
		}
		this.msg = "Login e senha não correspondem a um usuário cadastrado!";
		return "erro";
	}
	
	public List<Anuncio> getTodosAnuncios(){
		anuncioTemp = cadastros.getAnuncios();
		return anuncioTemp;
	}
	
	public String removerAnuncio(){
		
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletRequest request = (HttpServletRequest) context
				.getExternalContext().getRequest();
		String idAnuncio = (request.getParameter("idAnuncio"));
		List<Anuncio> tempAnuncio = new ArrayList<Anuncio>();
		Integer id = Integer.parseInt(idAnuncio);
		for(Anuncio a :usuario.getAnuncios()){			
			if(a.getId() != id)	{	
				tempAnuncio.add(a);	
			}else
				this.msg = "Removido Com Sucesso!";
		}
		usuario.apagarTodos();
		usuario.getAnuncios().addAll(tempAnuncio);		
		
		return "removerAnuncio";
	}
	
	public String detalhesAnuncio() {
		novoDetalhes = new Anuncio();
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletRequest request = (HttpServletRequest) context
				.getExternalContext().getRequest();
		String idAnuncio = (request.getParameter("idAnuncio"));
		
		if (idAnuncio != null) {
			Integer id = Integer.parseInt(idAnuncio);
			for (Anuncio anun : getTodosAnuncios()) {
				if (anun.getId() == id) {
					novoDetalhes = anun;
				}
			}
		}
		return "detalhes";
	}
	
	public String iniciarNovoAnuncio(){
		this.novoAnuncio = new Anuncio();
		novoAnuncio.setId(cadastros.getContadorIdAnuncio());
		return "iniciarCadastro";
	}
	
	public String adicionaAnuncio() {
		if (usuario != null) {		
			usuario.adicionaAnuncio(novoAnuncio);
			this.novoAnuncio = new Anuncio();
			this.msg = "Anuncio cadastrado com sucesso!";
			return "anuncioCadastrado";
		}
		return "erroCadastro";
	}

	public Anuncio getNovoAnuncio() {
		return novoAnuncio;
	}

	public void setNovoAnuncio(Anuncio novoAnuncio) {
		this.novoAnuncio = novoAnuncio;
	}

	public Anuncio getNovoDetalhes() {
		return novoDetalhes;
	}

	public void setNovoDetalhes(Anuncio novoDetalhes) {
		this.novoDetalhes = novoDetalhes;
	}
}
